<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="Content-Language" content="zh-CN"><title>file-hierarchy
  中文手册 [金步国]</title><style>
@font-face { font-family: "JinBuGuoWebMono"; src: url("http://www.jinbuguo.com/d/mono.ttf") format("truetype"); }
* { font-family: "JinBuGuoWebMono", "Ubuntu Mono", "Consolas", "Menlo", monospace; }
body { margin:10px; }
h1 { text-align:center; background:#ddd; }
h2#auth_name { text-align:center; margin: 10px 5%; }

    a.headerlink {
      color: #c60f0f;
      font-size: 0.8em;
      padding: 0 4px 0 4px;
      text-decoration: none;
      visibility: hidden;
    }

    a.headerlink:hover {
      background-color: #c60f0f;
      color: white;
    }

    h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
      visibility: visible;
    }
</style><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><h1>file-hierarchy 中文手册</h1><h2 id="auth_name">译者：<strong><a href="http://www.jinbuguo.com/">金步国</a></strong></h2><hr><h3>版权声明</h3><p>本文译者是一位开源理念的坚定支持者，所以本文虽然不是软件，但是遵照开源的精神发布。</p><ul><li>无担保：本文译者不保证译文内容准确无误，亦不承担任何由于使用此文档所导致的损失。</li><li>自由使用：任何人都可以自由的<u>阅读/链接/打印</u>此文档，无需任何附加条件。</li><li>名誉权：任何人都可以自由的<u>转载/引用/再创作</u>此文档，但必须保留译者署名并注明出处。</li></ul><h3>其他作品</h3><p>本文译者十分愿意与他人分享劳动成果，如果你对我的其他翻译作品或者技术文章有兴趣，可以在如下位置查看现有的作品集：</p><ul><li><a href="http://www.jinbuguo.com/">金步国作品集</a> [ <a href="http://www.jinbuguo.com/">http://www.jinbuguo.com/</a> ]</li></ul><h3>联系方式</h3><p>由于译者水平有限，因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好)，请来信指出，任何提高译文质量的建议我都将虚心接纳。</p><ul><li>Email(QQ)：70171448在QQ邮箱</li></ul><hr><a href="systemd.index.html">手册索引</a> ·
  <a href="systemd.directives.html">指令索引</a><span style="float:right">systemd-241</span><hr><div class="refentry"><a name="file-hierarchy"></a><div class="titlepage"></div><div class="refnamediv"><h2>名称</h2><p>file-hierarchy — 文件系统层次结构概览</p></div><div class="refsect1"><a name="id-1.4"></a><h2 id="描述">描述<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E6%8F%8F%E8%BF%B0">¶</a></h2><p>对于使用
    <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a> 的操作系统来说，
    其文件系统层次结构在遵守
     <a class="ulink" href="http://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html" target="_top">File System Hierarchy</a>
    与 <a href="http://man7.org/linux/man-pages/man7/hier.7.html"><span class="citerefentry"><span class="refentrytitle">hier</span>(7)</span></a> 规范的基础上，
    又按照 <a class="ulink" href="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html" target="_top">XDG Base Directory
    Specification</a> 与 <a class="ulink" href="https://www.freedesktop.org/wiki/Software/xdg-user-dirs/" target="_top">XDG User
    Directories</a> 规范进行了扩展。本手册描述了这些规范的一个更通用的、最小的、现代化的子集，
    它更严格的定义了 systemd 对文件系统层次结构所做的
    建议和限制。</p><p>许多本文所描述的路径都可以
    通过
    <a href="systemd-path.html#"><span class="citerefentry"><span class="refentrytitle">systemd-path</span>(1)</span></a>
    工具来查询。</p></div><div class="refsect1"><a name="id-1.5"></a><h2 id="总体结构">总体结构<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E6%80%BB%E4%BD%93%E7%BB%93%E6%9E%84">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/"><span class="term"><code class="filename">/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/">¶</a></dt><dd><p>文件系统的根。
        通常是可写的(也可以是只读的)，
        并且可以是一个 "<code class="literal">tmpfs</code>" 文件系统。
        除非是只读的，否则不与其他主机共享。</p></dd><dt id="/boot/"><span class="term"><code class="filename">/boot/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/boot/">¶</a></dt><dd><p>启动分区。
        在UEFI系统上通常是 ESP(EFI System Partition)，
        参见
        <a href="systemd-gpt-auto-generator.html#"><span class="citerefentry"><span class="refentrytitle">systemd-gpt-auto-generator</span>(8)</span></a> 手册。
        该目录通常严格位于本机的内置存储上，
        并且应该是只读的(除非需要安装内核或引导管理器)。
        仅当操作系统运行在物理机或者虚拟硬件上时才需要此目录，
        因为这种情况下
        必须使用引导管理器。</p></dd><dt id="/efi/"><span class="term"><code class="filename">/efi/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/efi/">¶</a></dt><dd><p>如果启动分区 <code class="filename">/boot/</code> 与 ESP(EFI System Partition) 不是同一个分区，
         那么应该将 ESP 挂载到此目录。操作 ESP 的工具应该首先使用此挂载点，
        仅在失败后才允许回退到 <code class="filename">/boot/</code> (例如
        <code class="filename">/efi/</code> 不是挂载点，或者文件系统类型不是
        <code class="constant">MSDOS_SUPER_MAGIC</code>)。</p></dd><dt id="/etc/"><span class="term"><code class="filename">/etc/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/etc/">¶</a></dt><dd><p>特定于该操作系统的配置。
        该目录可以是只读的(也可以是可读写的)。
        通常用于存储操作系统发行商预设的配置文件，
        但是应用程序
        不应该假设该目录中必然存在某个配置文件，
        而是应该在期望的配置文件不存在的情况下，
        回退到默认设置。</p></dd><dt id="/home/"><span class="term"><code class="filename">/home/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/home/">¶</a></dt><dd><p>存储普通用户的家目录。
        可以与其他操作系统共享，
        并且必须是可读写的(不能是只读的)。
        该目录必须仅用于普通用户，
        切勿用于系统用户(系统用户不只有"root")。
        该目录及其子目录可以在启动过程的末尾才变得可用，
        甚至可以在完成用户身份认证之后才变得可用。
        该目录可以位于功能受限的网络文件系统上，
        因此，应用程序不应该假定所有文件系统API在此目录上都可用。
        应用程序不应该直接引用该目录及其子目录，
        而是应该通过针对每个用户设置的 <code class="varname">$HOME</code> 环境变量来引用，
        或者
        根据用户数据库中的"家目录"字段的值来引用。</p></dd><dt id="/root/"><span class="term"><code class="filename">/root/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/root/">¶</a></dt><dd><p>"root"用户的家目录。
        将根用户的家目录放到
        <code class="filename">/home/</code> 之外是为了确保即使在
        <code class="filename">/home/</code> 目录不可用的情况下，
        "root"用户依然可以正常登录。</p></dd><dt id="/srv/"><span class="term"><code class="filename">/srv/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/srv/">¶</a></dt><dd><p>存储常规服务器数据(载荷)的目录，
        由服务器管理员管理。
        其中的子目录如何组织，没有明确的规范。
        该目录通常是可写的，
        并且可以与其他操作系统共享。
        该目录可以在启动过程的末尾才变得可用。</p></dd><dt id="/tmp/"><span class="term"><code class="filename">/tmp/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/tmp/">¶</a></dt><dd><p>存放小临时文件的目录。
        通常挂载为一个 "<code class="literal">tmpfs</code>" 文件系统。
        切勿在此目录中存放体积较大的临时文件
        (应该使用 <code class="filename">/var/tmp/</code> 目录)。
        因为系统上的所有用户都可以访问该目录，
        所以必须确保该目录仅对
        <a href="http://man7.org/linux/man-pages/man3/mkstemp.3.html"><span class="citerefentry"><span class="refentrytitle">mkstemp</span>(3)</span></a>,
        <a href="http://man7.org/linux/man-pages/man3/mkdtemp.3.html"><span class="citerefentry"><span class="refentrytitle">mkdtemp</span>(3)</span></a>
        相关系统调用可写。
        该目录在系统启动过程中会被清空。
        并且，如果其中的某些文件持续长时间不被访问，通常也会被自动删除。
        如果应用程序发现 <code class="varname">$TMPDIR</code> 环境变量已经被设置，
        那么应该使用 <code class="varname">$TMPDIR</code> 环境变量的设置，
        而不应该直接使用 <code class="filename">/tmp/</code> 目录(参见
        <a href="http://man7.org/linux/man-pages/man7/environ.7.html"><span class="citerefentry"><span class="refentrytitle">environ</span>(7)</span></a>
        与
        <a class="ulink" href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03" target="_top">IEEE
        Std 1003.1</a> )。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.6"></a><h2 id="运行时数据">运行时数据<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E8%BF%90%E8%A1%8C%E6%97%B6%E6%95%B0%E6%8D%AE">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/run/"><span class="term"><code class="filename">/run/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/run/">¶</a></dt><dd><p>一个用于存放系统软件运行时数据的 "<code class="literal">tmpfs</code>" 文件系统。
        该目录在系统启动过程中会被清空。
        该目录必须总是可写的，
        但是通常又应该仅赋予特权应用写入权限。</p></dd><dt id="/run/log/"><span class="term"><code class="filename">/run/log/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/run/log/">¶</a></dt><dd><p>运行时系统日志。
        系统组件可以在这个目录中存放私有日志。
        该目录必须总是可写的(即使 <code class="filename">/var/log/</code>
        目录尚不能访问)。</p></dd><dt id="/run/user/"><span class="term"><code class="filename">/run/user/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/run/user/">¶</a></dt><dd><p>针对每个用户的运行时目录。
        通常针对每个用户单独挂载一个 "<code class="literal">tmpfs</code>" 文件系统实例。
        该目录必须总是可写的，
        并且在系统启动过程中以及对应的用户登出后会被自动清空。
        应用程序不应该直接引用该目录，而是应该通过针对每个用户设置的
        <code class="varname">$XDG_RUNTIME_DIR</code> 环境变量来引用。
        详见 <a class="ulink" href="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html" target="_top">XDG
        Base Directory Specification</a></p></dd></dl></div></div><div class="refsect1"><a name="id-1.7"></a><h2 id="发行商提供的操作系统资源">发行商提供的操作系统资源<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E5%8F%91%E8%A1%8C%E5%95%86%E6%8F%90%E4%BE%9B%E7%9A%84%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E8%B5%84%E6%BA%90">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/usr/"><span class="term"><code class="filename">/usr/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/usr/">¶</a></dt><dd><p>发行商提供的操作系统资源。
        通常应该是只读的(但非必须是只读)。
        可以与其他主机共享。
        系统管理员不应该修改此目录中的内容，
        除非需要安装或卸载发行商提供的软件包。</p></dd><dt id="/usr/bin/"><span class="term"><code class="filename">/usr/bin/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/usr/bin/">¶</a></dt><dd><p>存放
        应当出现在 <code class="varname">$PATH</code> 搜索路径中的用户命令(可执行文件)。
        建议仅将命令行工具放到此目录中，
        而例如守护进程之类的非命令行工具，
        则应该放到
        <code class="filename">/usr/lib/</code> 下的子目录中。</p></dd><dt id="/usr/include/"><span class="term"><code class="filename">/usr/include/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/usr/include/">¶</a></dt><dd><p>系统库的 C 与 C++ API
        头文件目录。</p></dd><dt id="/usr/lib/"><span class="term"><code class="filename">/usr/lib/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/usr/lib/">¶</a></dt><dd><p>存放
        通用于所有体系结构的、静态的发行商专属数据。
        这包括软件包内部使用的可执行文件、
        以及例如守护进程之类的非命令行工具。
        这些二进制文件可用于该操作系统支持的所有体系结构。
        不要在此目录中放置公共库，
        而应该将它们放到 <code class="varname">$libdir</code> 目录中
        (参见下文)。</p></dd><dt id="/usr/lib/arch-id/"><span class="term"><code class="filename">/usr/lib/<em class="replaceable"><code>arch-id</code></em>/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/usr/lib/arch-id/">¶</a></dt><dd><p>存放动态链接库，
        又被称为 <code class="varname">$libdir</code> 目录。
        <em class="replaceable"><code>arch-id</code></em> 的具体名称遵守 <a class="ulink" href="https://wiki.debian.org/Multiarch/Tuples" target="_top">Multiarch
        Architecture Specifiers (Tuples)</a> 列表的规范。
        传统上，<code class="varname">$libdir</code> 通常是
        <code class="filename">/usr/lib/</code> 与
        <code class="filename">/usr/lib64/</code> 目录。
        该目录不应该用于存放特定于某个软件的专属数据，
        除非这些数据是专属于特定体系结构的。
        可以使用下面的命令查询用于该系统的首选体系结构的
        <code class="varname">$libdir</code> 的值：
        </p><pre class="programlisting"># systemd-path system-library-arch</pre></dd><dt id="/usr/share/"><span class="term"><code class="filename">/usr/share/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/usr/share/">¶</a></dt><dd><p>在多个软件包之间共享的资源，
        例如
        文档、手册、时区数据、字体等资源。
        此目录下的子目录结构及文件格式，
        取决于确保软件之间正常相互操作的各种规范。</p></dd><dt id="/usr/share/doc/"><span class="term"><code class="filename">/usr/share/doc/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/usr/share/doc/">¶</a></dt><dd><p>操作系统以及各种软件包的
        文档。</p></dd><dt id="/usr/share/factory/etc/"><span class="term"><code class="filename">/usr/share/factory/etc/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/usr/share/factory/etc/">¶</a></dt><dd><p>发行商提供的默认配置文件仓库。
        该目录中应该放置发行商提供的、
        所有可能放入
        <code class="filename">/etc/</code> 目录的配置文件的
        原始默认文件。
        这个目录主要是为了方便恢复默认设置
        以及对比当前配置与默认配置的不同。</p></dd><dt id="/usr/share/factory/var/"><span class="term"><code class="filename">/usr/share/factory/var/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/usr/share/factory/var/">¶</a></dt><dd><p>与
        <code class="filename">/usr/share/factory/etc/</code> 类似，
        用于存放发行商提供的 <code class="filename">/var/</code>
        目录内容的原始默认文件。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.8"></a><h2 id="应该持久保存的易变系统数据">应该持久保存的易变系统数据<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E5%BA%94%E8%AF%A5%E6%8C%81%E4%B9%85%E4%BF%9D%E5%AD%98%E7%9A%84%E6%98%93%E5%8F%98%E7%B3%BB%E7%BB%9F%E6%95%B0%E6%8D%AE">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/var/"><span class="term"><code class="filename">/var/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/var/">¶</a></dt><dd><p>应该持久保存的易变系统数据。
        该目录必须可写。
        该目录可以
        预先填充发行商预设的数据，
        但是应用程序可以自行创建所需的文件和目录。
        强烈推荐(但非必须)持久保存该目录中的数据，
        系统必须在该目录为空时依然能够正常启动，
        以支持临时运行的系统。
        该目录可以在启动过程的末尾才变得可用，
        因此那些在系统启动早期运行的组件
        不应该依赖于此目录的存在。</p></dd><dt id="/var/cache/"><span class="term"><code class="filename">/var/cache/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/var/cache/">¶</a></dt><dd><p>应该持久保存的系统缓存。
        系统组件可以在该目录中放置非关键的缓存。
        清空该目录必须不影响应用的正常工作
        (但应用可以花费额外的时间
        重建这些缓存)。</p></dd><dt id="/var/lib/"><span class="term"><code class="filename">/var/lib/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/var/lib/">¶</a></dt><dd><p>应该持久保存的系统数据。
        系统组件可以在该目录中放置专属的数据。</p></dd><dt id="/var/log/"><span class="term"><code class="filename">/var/log/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/var/log/">¶</a></dt><dd><p>应该持久保存的系统日志。
        系统组件可以在该目录中放置专属的日志。
        不过，推荐的方式是通过
        <a href="http://man7.org/linux/man-pages/man3/syslog.3.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
        与
        <a href="http://www.jinbuguo.com/systemd/sd_journal_print.html#"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>
        接口记录日志。</p></dd><dt id="/var/spool/"><span class="term"><code class="filename">/var/spool/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/var/spool/">¶</a></dt><dd><p>应该持久保存的系统队列。
        例如邮件队列或打印队列。</p></dd><dt id="/var/tmp/"><span class="term"><code class="filename">/var/tmp/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/var/tmp/">¶</a></dt><dd><p>应该持久保存的临时文件(通常体积也比较大)。
        此目录通常位于持久存储设备上，
        并且可以存储较大的临时文件。
        相比较而言，<code class="filename">/tmp/</code> 一般位于内存中，
        并且仅用于存储较小的临时文件。
        该目录在系统启动过程中一般不会被清空，
        但是，如果其中的某些文件持续长时间不被访问，通常也会被自动删除。
        因为系统上的所有用户都可以访问该目录，
        所以必须确保该目录仅对
        <a href="http://man7.org/linux/man-pages/man3/mkstemp.3.html"><span class="citerefentry"><span class="refentrytitle">mkstemp</span>(3)</span></a>,
        <a href="http://man7.org/linux/man-pages/man3/mkdtemp.3.html"><span class="citerefentry"><span class="refentrytitle">mkdtemp</span>(3)</span></a>
        相关系统调用可写。
        如果应用程序发现 <code class="varname">$TMPDIR</code> 环境变量已经被设置，
        那么应该使用 <code class="varname">$TMPDIR</code> 环境变量的设置，
        而不应该直接使用
        <code class="filename">/var/tmp/</code> 目录(参见
        <a href="http://man7.org/linux/man-pages/man7/environ.7.html"><span class="citerefentry"><span class="refentrytitle">environ</span>(7)</span></a>
        手册)。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.9"></a><h2 id="虚拟文件系统">虚拟文件系统<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E8%99%9A%E6%8B%9F%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/dev/"><span class="term"><code class="filename">/dev/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/dev/">¶</a></dt><dd><p>设备节点的根目录。
        通常被挂载为一个
         "<code class="literal">devtmpfs</code>" 文件系统实例
        (但在沙盒或容器中可能是其他类型)。
        该目录中的内容由内核与
        <a href="systemd-udevd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>
        共同管理，其他任何组件都不应该修改此目录中的内容。
        可以在该目录的子目录中
        再挂载其他特定用途的虚拟文件系统。</p></dd><dt id="/dev/shm/"><span class="term"><code class="filename">/dev/shm/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/dev/shm/">¶</a></dt><dd><p> POSIX
        共享内存(通过
        <a href="https://linux.die.net/man/3/shm_open"><span class="citerefentry"><span class="refentrytitle">shm_open</span>(3)</span></a>
        创建)。
        因为它其实是一个 "<code class="literal">tmpfs</code>" 文件系统，
        所以在系统启动过程中会被清空。
        因为系统上的所有用户都可以读写该目录，
        所以必须注意避免文件名冲突以及安全漏洞(也就是注意权限设置)。
        对于普通用户，当其退出登录时，其在该目录下创建的文件也会被删除。
        通常，在 <code class="filename">/run/</code> 目录(针对系统进程)
        或 <code class="varname">$XDG_RUNTIME_DIR</code> 目录(针对用户进程)中使用内存映射文件，
        是比使用POSIX共享内存更好的解决方案。
        因为这些目录不是全局可写的，
        所以不存在文件名冲突以及安全漏洞的问题。</p></dd><dt id="/proc/"><span class="term"><code class="filename">/proc/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/proc/">¶</a></dt><dd><p>显示进程信息以及其他功能的
        虚拟文件系统。
        此文件系统主要用作内核与用户交互的界面。
        详见
        <a href="http://man7.org/linux/man-pages/man5/proc.5.html"><span class="citerefentry"><span class="refentrytitle">proc</span>(5)</span></a> 手册。
        可以在该目录的子目录中
        再挂载其他特定用途的虚拟文件系统。</p></dd><dt id="/proc/sys/"><span class="term"><code class="filename">/proc/sys/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/proc/sys/">¶</a></dt><dd><p>调整内核各项参数的
        一个界面。
        主要通过
        <a href="sysctl.d.html#"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>
        中的配置文件进行设置。
        但在沙盒或容器中该目录通常以只读方式挂载(也就是禁止修改内核参数)。</p></dd><dt id="/sys/"><span class="term"><code class="filename">/sys/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/sys/">¶</a></dt><dd><p>显示所有已发现设备以及其他功能的
        虚拟文件系统。
        此文件系统主要用作内核与用户交互的界面。
        在沙盒或容器中该目录通常以只读方式挂载。
        可以在该目录的子目录中
        再挂载其他特定用途的
        虚拟文件系统。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.10"></a><h2 id="兼容性软连接">兼容性软连接<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E5%85%BC%E5%AE%B9%E6%80%A7%E8%BD%AF%E8%BF%9E%E6%8E%A5">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/bin/"><span class="term"><code class="filename">/bin/</code>, </span><span class="term"><code class="filename">/sbin/</code>, </span><span class="term"><code class="filename">/usr/sbin/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/bin/">¶</a></dt><dd><p>这三个软连接都指向
        <code class="filename">/usr/bin/</code>
        以确保
        对传统路径的兼容。</p></dd><dt id="/lib/"><span class="term"><code class="filename">/lib/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/lib/">¶</a></dt><dd><p>这个软连接指向
        <code class="filename">/usr/lib/</code>
        以确保
        对传统路径的兼容。</p></dd><dt id="/lib64/"><span class="term"><code class="filename">/lib64/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/lib64/">¶</a></dt><dd><p>在64位系统上，
        这个软连接指向 <code class="varname">$libdir</code>
        以确保对传统路径的兼容。
        此软连接仅存在于
        动态加载器位于此路径的
        系统架构上。</p></dd><dt id="/var/run/"><span class="term"><code class="filename">/var/run/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#/var/run/">¶</a></dt><dd><p>这个软连接指向
        <code class="filename">/run/</code>
        以确保
        对传统路径的兼容。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.11"></a><h2 id="家目录">家目录<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E5%AE%B6%E7%9B%AE%E5%BD%95">¶</a></h2><p>用户应用如果想要在用户的家目录中保存文件或目录，
    那么应该遵守下面的规范。
    注意，下面的某些目录虽然比较脆弱，
    但是已经被 <a class="ulink" href="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html" target="_top">XDG
    Base Directory Specification</a> 标准化了。
    其他为高层次用户资源定义的位置参见 <a class="ulink" href="https://www.freedesktop.org/wiki/Software/xdg-user-dirs/" target="_top">xdg-user-dirs</a> 文档。</p><div class="variablelist"><dl class="variablelist"><dt id="~/.cache/"><span class="term"><code class="filename">~/.cache/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#~/.cache/">¶</a></dt><dd><p>应该持久保存的用户缓存。
        应用可以在该目录中放置非关键的用户缓存。
        清空该目录中的缓存必须不影响应用的正常工作
        (但应用可以花费额外的时间重建这些缓存)。
        如果应用程序发现 <code class="varname">$XDG_CACHE_HOME</code> 环境变量已经被设置，
        那么应该使用 <code class="varname">$XDG_CACHE_HOME</code> 环境变量的设置，
        而不应该直接使用 <code class="filename">~/.cache/</code>
        目录。</p></dd><dt id="~/.config/"><span class="term"><code class="filename">~/.config/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#~/.config/">¶</a></dt><dd><p>应该持久保存的用户配置与状态。
        当新用户刚被创建时，该目录应该初始为空或根本不存在。
        如果期望的配置文件不存在于该目录中，
        那么应用程序应该回退到默认设置，而不应该罢工。
        如果应用程序发现 <code class="varname">$XDG_CONFIG_HOME</code> 环境变量已经被设置，
        那么应该使用 <code class="varname">$XDG_CONFIG_HOME</code> 环境变量的设置，
        而不应该直接使用 <code class="filename">~/.config/</code> 目录。</p></dd><dt id="~/.local/bin/"><span class="term"><code class="filename">~/.local/bin/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#~/.local/bin/">¶</a></dt><dd><p>存放应当出现在用户专属的
        <code class="varname">$PATH</code> 搜索路径中的
        用户命令(可执行文件)。
        建议仅将命令行工具放到此目录中，
        而例如守护进程之类的非命令行工具，
        则应该放到 <code class="filename">~/.local/lib/</code> 下的子目录中。
        注意，
        当在此目录中存放特定于体系结构的可执行文件时，
        可能会因为与其他不同体系结构的系统共享家目录而出现故障。</p></dd><dt id="~/.local/lib/"><span class="term"><code class="filename">~/.local/lib/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#~/.local/lib/">¶</a></dt><dd><p>存放通用于所有体系结构的、静态的用户专属数据。这包括软件包内部使用的可执行文件、以及例如守护进程之类的非命令行工具。这些二进制文件可用于该操作系统支持的所有体系结构。
        不要在此目录中放置公共库，而应该将它们放到 <code class="filename">~/.local/lib/<em class="replaceable"><code>arch-id</code></em>/</code> 目录中(参见下文)。</p></dd><dt id="~/.local/lib/arch-id/"><span class="term"><code class="filename">~/.local/lib/<em class="replaceable"><code>arch-id</code></em>/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#~/.local/lib/arch-id/">¶</a></dt><dd><p>存放专属于特定体系结构的动态链接库。
        <em class="replaceable"><code>arch-id</code></em> 的具体名称遵守 <a class="ulink" href="https://wiki.debian.org/Multiarch/Tuples" target="_top">Multiarch
        Architecture Specifiers (Tuples)</a>
        列表的规范。</p></dd><dt id="~/.local/share/"><span class="term"><code class="filename">~/.local/share/</code></span><a class="headerlink" title="Permalink to this term" href="file-hierarchy.html#~/.local/share/">¶</a></dt><dd><p>在多个软件包之间共享的资源，例如图标、字体等资源。
        此目录下的子目录结构及文件格式，
        取决于确保软件之间正常相互操作的各种规范。
        如果应用程序发现 <code class="varname">$XDG_DATA_HOME</code> 环境变量已经被设置，
        那么应该使用 <code class="varname">$XDG_DATA_HOME</code> 环境变量的设置，
        而不应该直接使用 <code class="filename">~/.local/share/</code>
        目录。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.12"></a><h2 id="非特权进程的写权限">非特权进程的写权限<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E9%9D%9E%E7%89%B9%E6%9D%83%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%86%99%E6%9D%83%E9%99%90">¶</a></h2><p>非特权进程通常对大多数目录
    都没有写权限。</p><p>但对于普通用户的非特权进程来说，可以写入
    <code class="filename">/tmp/</code>,
    <code class="filename">/var/tmp/</code>,
    <code class="filename">/dev/shm/</code>,
    <code class="varname">$HOME</code> (通常位于
    <code class="filename">/home/</code> 下),
    <code class="varname">$XDG_RUNTIME_DIR</code> (通常位于
    <code class="filename">/run/user/</code> 下)
    目录。</p><p>而对于系统的非特权进程来说，则仅可以写入
    <code class="filename">/tmp/</code>,
    <code class="filename">/var/tmp/</code>,
    <code class="filename">/dev/shm/</code> 目录。
    如果系统的非特权进程需要在
    <code class="filename">/var/</code> 或 <code class="filename">/run/</code>
    目录中创建一个专属的、可写入的目录，
    那么可以在守护进程丢弃特权之前先创建该目录，或者通过
    <a href="tmpfiles.d.html#"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>
    在系统启动时先创建该目录，或者通过服务单元文件中的
    <code class="varname">StateDirectory=</code> 与 <code class="varname">RuntimeDirectory=</code>
    指令(详见
    <a href="systemd.unit.html#"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>
    手册)创建该目录。</p></div><div class="refsect1"><a name="id-1.13"></a><h2 id="文件类型">文件类型<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B">¶</a></h2><p>Unix文件系统支持不同的文件节点类型：
    普通文件、目录、软连接、字符设备、块设备、
    套接字(socket)、管道(FIFO)。</p><p>强烈建议仅将设备文件放置在 <code class="filename">/dev/</code> 目录中、
    仅将套接字(socket)与管道(FIFO)文件
    放置在 <code class="filename">/run/</code> 目录中。
    而普通文件、目录、软连接
    则可以放置在所有目录中。</p></div><div class="refsect1"><a name="id-1.14"></a><h2 id="系统软件包">系统软件包<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E7%B3%BB%E7%BB%9F%E8%BD%AF%E4%BB%B6%E5%8C%85">¶</a></h2><p>系统软件包的开发者
    应该严格遵守下面的文件布局规范。
    下面列出了发行商提供的系统软件包中
    各类文件的推荐位置：</p><div class="table"><a name="id-1.14.3"></a><p class="title"><b>表 1. 系统软件包中静态文件的推荐位置</b></p><div class="table-contents"><table class="table" summary="系统软件包中静态文件的推荐位置" border="1"><colgroup><col align="left" class="directory"><col align="left" class="purpose"></colgroup><thead><tr><th align="left">目录</th><th align="left">用途</th></tr></thead><tbody><tr><td align="left"><code class="filename">/usr/bin/</code></td><td align="left">应该出现在 <code class="varname">$PATH</code> 搜索路径中且与体系结构无关的可执行文件。不要将软件包内部使用的可执行文件或非命令行工具(例如守护进程之类)放到此目录中。因为众多的软件包都使用此目录，所以必须选择独一无二的可执行文件名称，以避免冲突。</td></tr><tr><td align="left"><code class="filename">/usr/lib/<em class="replaceable"><code>arch-id</code></em>/</code></td><td align="left">全局通用的体系结构相关的共享库。因为众多的软件包都使用此目录，所以必须选择独一无二的共享库名称，以避免冲突。</td></tr><tr><td align="left"><code class="filename">/usr/lib/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">发行商提供的该软件包专属的体系结构无关的静态资源(可执行文件、库文件、只读数据)。</td></tr><tr><td align="left"><code class="filename">/usr/lib/<em class="replaceable"><code>arch-id</code></em>/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">发行商提供的体系结构相关的该软件包专属的资源(通常不包括软件包内部使用的可执行文件)。</td></tr><tr><td align="left"><code class="filename">/usr/include/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">该软件包提供的共享库的 C/C++ 头文件。</td></tr></tbody></table></div></div><br class="table-break"><p>发行商提供的其他静态资源应该存放在
    <code class="filename">/usr/share/</code> 目录下，
    具体的存放位置应该遵守其他的相关规范。</p><p>存放软件包运行时数据以及配置文件的
    相关目录如下：</p><div class="table"><a name="id-1.14.6"></a><p class="title"><b>表 2. 系统软件包的运行时数据以及配置文件的推荐位置</b></p><div class="table-contents"><table class="table" summary="系统软件包的运行时数据以及配置文件的推荐位置" border="1"><colgroup><col align="left" class="directory"><col align="left" class="purpose"></colgroup><thead><tr><th align="left">目录</th><th align="left">用途</th></tr></thead><tbody><tr><td align="left"><code class="filename">/etc/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">特定于该系统的配置文件。如果该目录不存在，那么软件包应该尽可能回退到安全的默认设置，而不应该罢工。可以设置一个 <a href="tmpfiles.d.html#"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> 配置文件，以实现在系统启动过程中，从 <code class="filename">/usr/share/factory/</code> 目录中复制("<code class="literal">C</code>"指令)或软连接("<code class="literal">L</code>"指令)所需的文件到该目录中。</td></tr><tr><td align="left"><code class="filename">/run/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">软件包的运行时数据。因为该目录会在系统启动过程中被清空，所以软件包必须有权限在此目录中创建子目录及文件。可以设置一个 <a href="tmpfiles.d.html#"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> 配置文件，以实现在系统启动过程中自动在此目录中创建所需的子目录及文件，或者在服务单元文件中使用 <code class="varname">RuntimeDirectory=</code> 指令(详见 <a href="systemd.unit.html#"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a> 手册)在服务启动时创建它们。</td></tr><tr><td align="left"><code class="filename">/run/log/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">软件包的运行时日志。因为该目录会在系统启动过程中被清空，所以软件包必须有权限在此目录中创建子目录及文件。</td></tr><tr><td align="left"><code class="filename">/var/cache/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">软件包的持久缓存。清空该目录必须不影响软件包的正常工作(但软件包可以花费额外的时间重建这些缓存)。软件包必须有权限在此目录中创建子目录及文件。可以设置一个 <a href="tmpfiles.d.html#"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> 配置文件，或者在服务单元文件中使用 <code class="varname">CacheDirectory=</code> 指令(详见 <a href="systemd.unit.html#"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a> 手册)来创建此空目录。</td></tr><tr><td align="left"><code class="filename">/var/lib/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">软件包的持久专属数据。存放无法明确分类的持久数据。软件包必须有权限在此目录中创建子目录及文件，因为在系统启动时该目录可能为空。可以设置一个 <a href="tmpfiles.d.html#"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> 配置文件，或者在服务单元文件中使用 <code class="varname">StateDirectory=</code> 指令(详见 <a href="systemd.unit.html#"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a> 手册)来创建此空目录。</td></tr><tr><td align="left"><code class="filename">/var/log/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">软件包的持久日志数据。软件包必须有权限在此目录中创建子目录及文件，因为在系统启动时该目录可能为空。可以设置一个 <a href="tmpfiles.d.html#"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> 配置文件，或者在服务单元文件中使用 <code class="varname">LogsDirectory=</code> 指令(详见 <a href="systemd.unit.html#"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a> 手册)来创建此空目录。</td></tr><tr><td align="left"><code class="filename">/var/spool/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">软件包的持久队列数据。软件包必须有权限在此目录中创建子目录及文件，因为在系统启动时该目录可能为空。</td></tr></tbody></table></div></div><br class="table-break"></div><div class="refsect1"><a name="id-1.15"></a><h2 id="用户软件包">用户软件包<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E7%94%A8%E6%88%B7%E8%BD%AF%E4%BB%B6%E5%8C%85">¶</a></h2><p>对于专属于特定用户的软件包，
    其存贮在用户家目录中的文件必须严格遵守下面的文件布局规范。
    注意，
    当安装属于系统范围的软件包时，
    应该遵守前面"系统软件包"小节的布局规范。
    下面列出了当用户在其家目录中安装专属软件包时，
    由发行商提供的各种类型的文件在用户家目录中应该存放的位置：</p><div class="table"><a name="id-1.15.3"></a><p class="title"><b>表 3. 用户软件包中静态文件的推荐位置</b></p><div class="table-contents"><table class="table" summary="用户软件包中静态文件的推荐位置" border="1"><colgroup><col align="left" class="directory"><col align="left" class="purpose"></colgroup><thead><tr><th align="left">目录</th><th align="left">用途</th></tr></thead><tbody><tr><td align="left"><code class="filename">~/.local/bin/</code></td><td align="left">应该出现在 <code class="varname">$PATH</code> 搜索路径中且与体系结构无关的可执行文件。不要将软件包内部使用的可执行文件或非命令行工具(例如守护进程之类)放到此目录中。因为众多的软件包都使用此目录，所以必须选择独一无二的可执行文件名称，以避免冲突。</td></tr><tr><td align="left"><code class="filename">~/.local/lib/<em class="replaceable"><code>arch-id</code></em>/</code></td><td align="left">全局通用的体系结构相关的共享库。因为众多的软件包都使用此目录，所以必须选择独一无二的共享库名称，以避免冲突。</td></tr><tr><td align="left"><code class="filename">~/.local/lib/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">发行商提供的该软件包专属的体系结构无关的静态资源(可执行文件、库文件、只读数据)。</td></tr><tr><td align="left"><code class="filename">~/.local/lib/<em class="replaceable"><code>arch-id</code></em>/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">发行商提供的体系结构相关的该软件包专属的资源(通常不包括软件包内部使用的可执行文件)。</td></tr></tbody></table></div></div><br class="table-break"><p>发行商提供的其他静态资源应该存放在
    <code class="filename">~/.local/share/</code> 目录下，
    具体的存放位置应该遵守其他的相关规范。</p><p>存放软件包运行时数据以及配置文件的
    相关目录如下：</p><div class="table"><a name="id-1.15.6"></a><p class="title"><b>表 4. 用户软件包的运行时数据以及配置文件的推荐位置</b></p><div class="table-contents"><table class="table" summary="用户软件包的运行时数据以及配置文件的推荐位置" border="1"><colgroup><col align="left" class="directory"><col align="left" class="purpose"></colgroup><thead><tr><th align="left">目录</th><th align="left">用途</th></tr></thead><tbody><tr><td align="left"><code class="filename">~/.config/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">特定于该用户的配置文件。如果该目录不存在，那么软件包必须能够安全的回退到默认设置，而不能罢工。</td></tr><tr><td align="left"><code class="filename"><code class="varname">$XDG_RUNTIME_DIR</code>/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">特定于该用户的运行时数据。</td></tr><tr><td align="left"><code class="filename">~/.cache/<em class="replaceable"><code>package</code></em>/</code></td><td align="left">软件包的持久缓存。清空该目录必须不影响软件包的正常工作(但软件包可以花费额外的时间重建这些缓存)。软件包必须有权限在此目录中创建子目录及文件。</td></tr></tbody></table></div></div><br class="table-break"></div><div class="refsect1"><a name="id-1.16"></a><h2 id="参见">参见<a class="headerlink" title="Permalink to this headline" href="file-hierarchy.html#%E5%8F%82%E8%A7%81">¶</a></h2><p>
      <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
      <a href="http://man7.org/linux/man-pages/man7/hier.7.html"><span class="citerefentry"><span class="refentrytitle">hier</span>(7)</span></a>,
      <a href="systemd-path.html#"><span class="citerefentry"><span class="refentrytitle">systemd-path</span>(1)</span></a>,
      <a href="systemd-gpt-auto-generator.html#"><span class="citerefentry"><span class="refentrytitle">systemd-gpt-auto-generator</span>(8)</span></a>,
      <a href="sysctl.d.html#"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>,
      <a href="tmpfiles.d.html#"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>,
      <a href="https://linux.die.net/man/1/pkg-config"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>,
      <a href="systemd.unit.html#"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>
    </p></div></div></body></html>
